home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
NEWSOFT
/
AUGUST
/
WORKDISC
/
!Forthmacs
/
spread
/
spread_doc
< prev
next >
Wrap
Text File
|
1995-10-19
|
3KB
|
99 lines
Forth Spreadsheet
This is the "Craig Lindley" Forth Spreadsheet which was published in
Forth Dimensions, Vol. 7 Nos. 1 and 2. That article contains a discussion
of the implementation. The port to Forthmacs required a few source code
changes, particularly in order to make it work on a 32-bit Forth
implementation. I also increased the number of rows from 26 to 100,
eliminated some redundant screen redisplays in the GO_TO command, rewrote
a lot of the cursor movement code, and added control key bindings so that
the EMACS cursor movement keys can be used as well as the arrow keys.
To get started:
fload spread.fth
spreadsheet
Spreadsheet commands:
Cursor Movement
up ^P, up_arrow Up one row
down ^N, down_arrow Down one row
left ^B, left_arrow Left one column
right ^F, right_arrow Right one column
left_page ^Y, F1 Left 4 columns
right_page ^U, F2 Right 4 columns
up_page ^T, F3 Up 15 rows
down_page ^V, F4 Down 15 rows
first_col ^A, F5 Go to column A
last_col ^E, F6 Go to column Z
top_row F7 Go to row 0.
bottom_row F8 Go to row 99
go_to g Prompts for new row and column
Other
input_cell_data d Put number in cell
input_equ e Put equation in cell
input_row_names r Put labels on rows
input_col_names c Put labels on columns
format f Select integer or dollar format
replicate_col a Copy data to other columns
mode m Select auto or manual recalculation
new n Erase spreadsheet
calc_order o Select row or column calculation order
perform_calc p, ^L Recalculate
quit_calc q, ^Z Exit
Equations
Equations are entered in infix notation, for example:
5 b + ( 10 c * 11 f )
The spaces are required. This equation multiplies cell "10 C" by cell
"11 F", and adds cell "5 B" to the result. In this example, the parentheses
are redundant, since * has a higher precedence than +.
Operators:
* / Highest precedence
+ - Normal precedence
mod Lowest precedence
Operators with the same precedence associate from left to right.
What is Wrong with this Spreadsheet
1) The recalculation algorithm is naive. Instead of calculating rows first,
then columns, (or vice versa), a spreadsheet should keep a dependency
graph and recalculate only those paths in the graph which depend on
changed data. This would eliminate redundant recalculation.
2) There should be a way to specify a range of values in an equation, for
example: sum all the entries between cell 3 A and cell 10 A.
3) Reverse-Polish notation for equations is more flexible, and would allow
any Forth operator to appear in an equation.
4) Should use the mouse, GEM windows, etc.
5) There should be a print command.
6) There should be some way to store the spreadsheet state in a file and
restore it later.
7) There should be some way to insert/delete whole rows/columns.
8) The key bindings should be set by dictionary entries, in the same way
that Forthmacs binds editing keys.
9) The current cell should be marked with inverse video.
10) It should be possible to enter numbers without using the "D" command.